/**
 * 1、通过一个 0b1111_1111_1111_1111_1111_1111_1111_1111 向左移动一位 ，
 *    得到一个 负整数 111_1111_1111_1111_1111_1111_1111_1111_0
 * 
 * 2、让得到的负整数 与 1 按位或 即可得到 1111_1111_1111_1111_1111_1111_1111_1111
 * 
 * 3、让 1111_1111_1111_1111_1111_1111_1111_1111 与任意负整数 按位与 得到的仍然是 原来的负整数
 */

const x = 0b1111_1111_1111_1111_1111_1111_1111_1111 ;
console.log( x );

// 挤掉高位，低位补零
let y = x << 1 ; // 111_1111_1111_1111_1111_1111_1111_1111_0
console.log( y );

//    111_1111_1111_1111_1111_1111_1111_1111_0 (y)
// |  000_0000_0000_0000_0000_0000_0000_0000_1 (正整数1)
//    111_1111_1111_1111_1111_1111_1111_1111_1 (z)
let z = y | x ;
console.log( z ); // 1111_1111_1111_1111_1111_1111_1111_1111

let first = -5 ; // 1111_1111_1111_1111_1111_1111_1111_1011
console.log( first );

console.log( '- - - - - - - - - - - - - - - - - -' );

//    1111_1111_1111_1111_1111_1111_1111_1011 (first)
// &  1111_1111_1111_1111_1111_1111_1111_1111 (-1)
//    1111_1111_1111_1111_1111_1111_1111_1011 (second)
let second = first & z ;
console.log( second );


console.log( '- - - - - - - - - - - - - - - - - -' );

let third = 0b1111_1111_1111_1111_1111_1111_1111_1111 << 1 | 1 ; // -1
console.log( third );

console.log( '- - - - - - - - - - - - - - - - - -' );

let fourth = 0b1111_1111_1111_1111_1111_1111_1111_1011 & -1 ;
console.log( fourth );